/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Clases.CCliente;
import Clases.CEmpleado;
import Clases.CEntrada;
import Clases.CProducto;
import Clases.CProveedor;
import Clases.CVehiculo;
import Clases.MCCliente;
import Clases.MCComprobante;
import Clases.MCDetalleVenta;
import Clases.MCServicioTecnico;
import Clases.MCVenta;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Rudy
 */
public class Conection {
    public String aBDnombre="dbalmacen";
    public String aUrl="jdbc:mysql://localhost/"+aBDnombre;
    public String aLogin="root";
    public String aPassword="";
    protected  Connection conexion; 
    Statement consultaSQL;
    ResultSet resultado;
    
    public void Conectar()
    {
         conexion=null;
         try {
             Class.forName("com.mysql.jdbc.Driver").newInstance();
            conexion=DriverManager.getConnection(aUrl,aLogin,aPassword);
            System.out.println("ok conection");

        } catch (Exception e) {
            System.out.print("error conection");
        }

    }
    public void Desconectar()
    {

         try {
            if(conexion!=null)
            {
              System.out.println("ok desconection");
              conexion.close();
            }
        } catch (Exception e) {
        }

     }
   public Connection getConnection(){
      return conexion;
   }
   public String Login(String user,String pass)
    {
        String result="false";
        String query="select tipo from tusuario where usuario='"+user+"' and clave=MD5('"+pass+"') and estado='habilitado'";
        try {
            Statement consultSQL= conexion.createStatement();
            consultSQL.execute(query);
            ResultSet rs=consultSQL.getResultSet();
            while(rs.next())
            {
                result=rs.getString(1);
            }
        } catch (Exception e) {
            System.out.print("error login");
        }
        return result;
    }
    public boolean  Existe(String date,String column,String table)
    {
        boolean existe=false;
        String CodigoB="";
        String ConsultaBuscar="select "+ column+" from "+table;
        try {
            Statement ConsultaSQL= conexion.createStatement();
            ConsultaSQL.execute(ConsultaBuscar);
            ResultSet rs=ConsultaSQL.getResultSet();
            while(rs.next())
            {
                CodigoB=rs.getString(1);
                if(CodigoB.equals(date))
                {
                    existe=true;
                }

            }

        } catch (Exception e) {
        }
        return existe;
    }
    public ResultSet consulta(String SQL)
     {
         try {
             Statement ConsultaSql= this.conexion.createStatement();
             ConsultaSql.executeQuery (SQL);
             return ConsultaSql.getResultSet();

         } catch (Exception e) {
             System.out.println(e);
            return null;
         }
     }
    public void RealizarModificacion(String Consulta)
    {
        try
        {
            Statement ConsultaSQL= conexion.createStatement();
            int a=ConsultaSQL.executeUpdate(Consulta);
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }    
    public void Insertar(ArrayList datos, String tabla)
    {
        String datosAgregar="";
        for(int i=0;i<datos.size();i++)
        {
            String val=String.valueOf( datos.get(i));
            datosAgregar=datosAgregar+",'"+val+"'";
        }
        datosAgregar= datosAgregar.substring(1,datosAgregar.length());
        String ConsulInsert="INSERT into "+tabla+" values ("+datosAgregar+")";
        //System.out.println(ConsulInsert);
        RealizarModificacion(ConsulInsert);
    }
    public void insert(ArrayList columns, ArrayList values,String tabla)
    {
        String sql="";
	int numcampos=columns.size();
	int maxarray=numcampos-1;
	if (numcampos>0){
		sql="INSERT INTO "+tabla+" (";
		for(int i=0;i<numcampos;i++){
			sql=sql+columns.get(i).toString();
			if(i!=maxarray){
				sql=sql+", ";
			}
		}
		sql=sql+") VALUES (";
		for(int i=0;i<numcampos;i++){
                        if(columns.get(i).equals("clave"))
                        {
                            sql=sql+"MD5('"+values.get(i)+"')";
                        }
                        else
                        {
                            sql=sql+"'"+values.get(i)+"'";
                        }
			if(i!=maxarray){
				sql=sql+", ";	
			}
		}
		sql=sql+")";
		//echo $sql; 
	}
        //System.out.println(sql);
	RealizarModificacion(sql);
    }
    public void update(ArrayList columns,ArrayList values,String tabla,String condition)
    {
        String sql="";
	int numcampos=columns.size();
	int maxarray=numcampos-1;
	if (numcampos>0){
		sql="UPDATE "+tabla+" SET ";
		for(int i=0;i<numcampos;i++){
                        if(columns.get(i).equals(" clave "))
                        {
                            sql+=columns.get(i)+"=MD5('"+values.get(i)+"')";
                        }
                        else
                        {
                            sql+=columns.get(i)+"='"+values.get(i)+"'";
                        }
			if(i!=maxarray){
				sql+=", ";
			}
		}
		sql+=" WHERE "+condition;
        }
        //System.out.println(sql);
	RealizarModificacion(sql);
    }
    public void delete(String tabla, String condition){
	String sql="DELETE FROM "+tabla+" WHERE "+condition;
	//System.out.println(sql);
	RealizarModificacion(sql);
    }
 
    public DefaultTableModel Tabla(ResultSet Res,String[] colum_names)
    {
        DefaultTableModel tabla=new DefaultTableModel();
        try
        {
            ResultSetMetaData metadatos=Res.getMetaData();
            int Nrocol =metadatos.getColumnCount();
            tabla.setColumnIdentifiers(colum_names);
            Object[] Fila=new Object[Nrocol];
            if(Res!=null)
                while(Res.next())
                {
                    for(int i=0;i<Nrocol;i++)
                    {
                        //if(!inArray(i+1,exception))
                        //{
                            Fila[i]=Res.getObject(i+1);
                       // }
                       // else
                        //{
                        //    i=i+2;
                        //}
                    }
                    tabla.addRow(Fila);
                }
            return tabla;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }
    public ResultSet SelectSimple(String table,String columns,String condition)
    {
        String query="Select "+columns+" from "+table+condition;
        return  consulta(query);
    }
    public ArrayList getDates(String table,String condition)
    {
        ArrayList dates=new ArrayList();
        try
        {
            Statement ConsultaSQL= conexion.createStatement();
            ConsultaSQL.execute("SELECT * FROM "+table+" where "+condition);
            ResultSet rs=ConsultaSQL.getResultSet();
            ResultSetMetaData metadatos=rs.getMetaData();
            int Nrocol =metadatos.getColumnCount();
            while(rs.next())
            {
                for(int i=0;i<Nrocol;i++)
                {
                    //System.out.println(rs.getString(i+1));
                    dates.add(rs.getString(i+1));
                }               
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        return dates;
    }
//    public void cargarComboProducto(JComboBox combo) throws SQLException{
//        String textoSQL = "SELECT * FROM tproducto ORDER BY id_producto";
//        consultaSQL = conexion.createStatement();
//        resultado = consultaSQL.executeQuery(textoSQL);
//        while (resultado.next()) {
//            CProducto pro = new CProducto();
//            pro.setIdProducto(resultado.getString("id_producto"));
//            pro.setNombre(resultado.getString("nombre"));
//            pro.setDescripcion(resultado.getString("descripcion"));
//            pro.setPrecio_unitario(resultado.getFloat("precio_unitario"));
//            pro.setPorcentaje_descuento(resultado.getFloat("porcentaje_descuento"));
//            pro.setStock(resultado.getInt("stock"));
//            combo.addItem(pro);
//        }
//    }
    public DefaultTableModel cargarTablaProducto(DefaultTableModel modelo,String condition) throws SQLException{ 
        String consult = "SELECT * FROM tproducto "+condition;
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(consult);
        int i=1;
        while (resultado.next()) {
            Object D[] ={i,false,resultado.getString("id_producto"),resultado.getString("nombre"),resultado.getDouble("precio_unitario"),resultado.getDouble("porcentaje_descuento"),resultado.getDouble("porcentaje_ganancia"),resultado.getInt("stock")};
            modelo.addRow(D);
            i++;
        }            
        return modelo;
    }
    public DefaultTableModel cargarTablaServicioTecnico(DefaultTableModel modelo,String condition) throws SQLException{ 
        String consult = "SELECT * FROM tservicio_tecnico "+condition;
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(consult);
        int i=1;
        while (resultado.next()) {
            Object D[] ={i,false,resultado.getInt("id_servicio_tecnico"),resultado.getString("placa"),resultado.getString("fecha")};
            modelo.addRow(D);
            i++;
        }            
        return modelo;
    }
    
    public  void cargarComboCliente(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM tcliente ORDER BY dni_ruc";
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CCliente cliente = new CCliente();
            cliente.setDni_ruc(resultado.getString("dni_ruc"));
            cliente.setNombre(resultado.getString("nombre"));
            cliente.setDireccion(resultado.getString("direccion"));
            cliente.setEmail(resultado.getString("email"));
            cliente.setTelefono(resultado.getString("telefono"));
            combo.addItem(cliente);          

        }
    }
    
    public  void cargarComboEmpleado(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM templeado ORDER BY dni_empleado";
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CEmpleado empleado = new CEmpleado();
            empleado.setDni_empleado(resultado.getString("dni_empleado"));
            empleado.setNombre(resultado.getString("nombre"));
            empleado.setUsuario(resultado.getString("usuario"));
            empleado.setDireccion(resultado.getString("direccion"));
            empleado.setTelefono(resultado.getString("telefono"));
            empleado.setEmail(resultado.getString("email"));
            empleado.setEstado(resultado.getString("estado"));
            combo.addItem(empleado);
        }
    }
    
    public  void cargarComboVehiculo(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM tvehiculo ORDER BY placa";
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CVehiculo vehiculo = new CVehiculo();
            vehiculo.setPlaca(resultado.getString("placa"));
            vehiculo.setModelo(resultado.getString("modelo"));
            vehiculo.setMarca(resultado.getString("marca"));
            vehiculo.setNro_serie(resultado.getString("nro_serie"));
            vehiculo.setKilometraje(resultado.getString("kilometraje"));
            vehiculo.setDescripcion(resultado.getString("descripcion"));
            combo.addItem(vehiculo);
        }
    }
    
    public int getUltimoId2(String tabla,String clave){
        String textoSQL="SELECT "+clave+" FROM "+tabla+" WHERE "+clave+"=(SELECT MAX("+clave+") FROM "+tabla+")";
        int id=0;
        try {
            consultaSQL = conexion.createStatement();
            resultado = consultaSQL.executeQuery(textoSQL);
            if(resultado.next()){
                id = resultado.getInt(clave);
            }          
        } catch (Exception e) {
            System.out.println(e);
        }
        return id;
    }
    public int getUltimoId(){
        String textoSQL="SELECT id_venta FROM tventa WHERE id_venta=(SELECT MAX(id_venta) FROM tventa)";
        int id=0;
        try {
            consultaSQL = conexion.createStatement();
            resultado = consultaSQL.executeQuery(textoSQL);
            if(resultado.next()){
                id = resultado.getInt("id_venta");
            }          
        } catch (Exception e) {
            System.out.println(e);
        }
        return id;
    }
    public int getUltimoId(String campo,String tabla){
        String textoSQL="SELECT "+campo+" FROM "+tabla+" WHERE "+campo+"=(SELECT MAX("+campo+") FROM "+tabla+")";
        int id=0;
        try {
            consultaSQL = conexion.createStatement();
            resultado = consultaSQL.executeQuery(textoSQL);
            if(resultado.next()){
                id = resultado.getInt(campo);
            }          
        } catch (Exception e) {
            System.out.println(e);
        }
        return id;
    }
    public int getStock(String idproducto) throws SQLException{
       String textoSQL = "select * from tproducto where id_producto='"+idproducto+"'";
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        int s=0;
        while (resultado.next()) {           
            s= resultado.getInt("stock");
       }
        return s;
   }
   public ResultSet Seleccion(String tabla,String condicion) throws SQLException{
        String textoSQL = "SELECT * FROM "+tabla+" where "+condicion;
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(textoSQL);
        return resultado;
    }
    public void cargarComboEntradas(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM tentrada ORDER BY id_entrada";
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CEntrada pro = new CEntrada();
            pro.setIdEntrada(resultado.getInt("id_entrada"));
            pro.setFecha(resultado.getDate("fecha"));
            pro.setDni(resultado.getString("dni"));
            pro.setRuc(resultado.getString("ruc"));
            combo.addItem(pro);
        }
    }
    public void cargarComboProducto(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM tproducto ORDER BY id_producto";
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CProducto pro = new CProducto();
            pro.setIdProducto(resultado.getString("id_producto"));
            pro.setNombre(resultado.getString("nombre"));
            pro.setDescripcion(resultado.getString("descripcion"));
            pro.setPrecio_unitario(resultado.getFloat("precio_unitario"));
            pro.setPorcentaje_descuento(resultado.getFloat("porcentaje_descuento"));
            pro.setUnidad_medida(resultado.getString("unidad_medida"));
            pro.setStock(resultado.getInt("stock"));
            pro.setPorcentaje_ganancia(resultado.getFloat("porcentaje_ganancia"));
            pro.setFecha_registro(resultado.getDate("fecha_registro"));
            combo.addItem(pro);
        }
    }
    public void cargarComboProveedor(JComboBox combo) throws SQLException{
        String textoSQL = "SELECT * FROM tproveedor ORDER BY ruc";
        consultaSQL = conexion.createStatement();
        resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CProveedor pro = new CProveedor();
            pro.setRuc(resultado.getString("ruc"));
            pro.setRazonSocial(resultado.getString("razon_social"));
            pro.setDireccion(resultado.getString("direccion"));
            pro.setEmail(resultado.getString("email"));
            pro.setTelefono(resultado.getString("telefono"));
            pro.setWeb(resultado.getString("web"));
            combo.addItem(pro);
        }
    }
////////////////marco//////////////////////    
    public ArrayList<MCComprobante> MrecuperarContratasActivas() throws SQLException{
        ArrayList L = new ArrayList();
        String textoSQL = "select v.id_venta,c.dni_ruc,c.nombre,v.fecha from tcliente c,tventa v where v.dni_ruc=c.dni_ruc and v.estado='cancelado'";
        Statement consulta = conexion.createStatement();
        this.resultado = consulta.executeQuery(textoSQL);
        while (resultado.next()) {
            MCComprobante C = new MCComprobante();
            C.setId_venta(resultado.getString("id_venta"));
            C.setDni_ruc(resultado.getString("dni_ruc"));
            C.setNombre(resultado.getString("nombre"));
            C.setFecha(resultado.getString("fecha"));
            L.add(C);
        }
        return L;
    } 
    public MCVenta MrecuperarVenta(String idVenta) throws SQLException{
        MCVenta venta=new MCVenta();
        String textoSQL = "select * from tventa where id_venta="+Integer.parseInt(idVenta);
        Statement consulta = conexion.createStatement();
        this.resultado = consulta.executeQuery(textoSQL);
        while (resultado.next()) {
            venta.setId_venta(resultado.getString("id_venta"));
            venta.setDni_ruc(resultado.getString("dni_ruc"));
            venta.setTipo(resultado.getString("tipo"));
            venta.setFecha(resultado.getString("fecha"));
            venta.setEstado(resultado.getString("estado"));
        }
        return venta;        
    }
    public MCCliente MrecuperarCliente(String dni_ruc) throws SQLException{
        MCCliente cliente=new MCCliente();
        String textoSQL = "select * from tcliente where dni_ruc="+Integer.parseInt(dni_ruc);
        Statement consulta = conexion.createStatement();
        this.resultado = consulta.executeQuery(textoSQL);
        while (resultado.next()) {
            cliente.setDireccion(resultado.getString("direccion"));
            cliente.setDni_ruc(resultado.getString("dni_ruc"));
            cliente.setEmail(resultado.getString("email"));
            cliente.setNombre(resultado.getString("nombre"));
            cliente.setTelefono(resultado.getString("telefono"));
        }
        return cliente;        
    }
    public ArrayList<MCDetalleVenta> MrecuperarDetalleVenta(String id_venta) throws SQLException{
        ArrayList lista=new ArrayList();
        String textoSQL = "select d.id_producto,d.cantidad,d.unidad_medida,p.descripcion,d.precio_unitario,p.porcentaje_descuento,p.stock from tdetalle_venta d,tventa v,tproducto p where v.id_venta=d.id_venta and d.id_producto=p.id_producto and v.id_venta="+Integer.parseInt(id_venta);
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            MCDetalleVenta detalle=new MCDetalleVenta();
            detalle.setCantidad(resultado.getString("cantidad"));
            detalle.setId_producto(resultado.getString("id_producto"));
            detalle.setPrecio_unitario(resultado.getString("precio_unitario"));
            detalle.setUnidad_medida(resultado.getString("unidad_medida"));
            detalle.setDescripcion(resultado.getString("descripcion"));
            detalle.setPorcentaje_descuento(resultado.getString("porcentaje_descuento"));
            detalle.setStok(resultado.getString("stock"));
            lista.add(detalle);            
        }
        return lista;        
    }
    public MCServicioTecnico MrecuperarSV(String idFactura) throws SQLException{
        MCServicioTecnico CT=null;
        String textoSQL = "select id_servicio_tecnico,costototal from tservicio_tecnico where id_venta="+Integer.parseInt(idFactura);
        consultaSQL = conexion.createStatement();
        this.resultado = consultaSQL.executeQuery(textoSQL);
        while (resultado.next()) {
            CT=new MCServicioTecnico();
            CT.setIdproducto(resultado.getString("id_servicio"));
            CT.setPrecio_servicio(resultado.getString("costo"));
            CT.setServicio_tecnico("servicio_tecnico");
        }
        return CT;
    }
    public void Mcambiar_estado_venta(String tipo,String Nro,String cambio) throws SQLException{
        
        String textoSQL = "UPDATE tventa SET estado='"+cambio+"' WHERE id_venta='"+Nro+"' and tipo='"+tipo+"'";
        consultaSQL = conexion.createStatement();
        consultaSQL.executeUpdate(textoSQL);
        
    }
    public void Mcambiarstok(String id_producto, int stok) throws SQLException{
        
        String textoSQL = "UPDATE tproducto SET stock='"+stok+"' WHERE id_producto='"+id_producto+"'";
        consultaSQL = conexion.createStatement();
        consultaSQL.executeUpdate(textoSQL);
        
    }
           
    ///////////////////////////////////////////////////
    public String get_tipoCambio()
    {
        String result="0.00";
        String query="Select cambio from ttipo_cambio where estado='activo'";
        try {
            Statement consultSQL= conexion.createStatement();
            consultSQL.execute(query);
            ResultSet rs=consultSQL.getResultSet();
            while(rs.next())
            {
                result=rs.getString(1);
            }
        } catch (Exception e) {
            System.out.print("error get_tipoCambio");
        }
        return result;
    }
}
